package com.zzl.finance.data.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzl.finance.data.dto.*;
import com.zzl.finance.data.entity.EnterpriseRelationEntity;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.requestparameter.KeyAndValue;
import com.zzl.general.common.serurity.entity.User;
import com.zzl.general.common.utils.PageUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 企业关系表
 *
 * @author sunpp
 * @date 2021-11-30 13:12:59
 */
@SuppressWarnings("javadoc")
public interface EnterpriseRelationService extends IService<EnterpriseRelationEntity> {

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return 分页数据
     */
    PageUtils queryWhitePage(Map<String, Object> params) throws SysException;

    /**
     * 查询企业黑名单数据
     *
     * @param params 条件参数
     * @return 分页数据
     */
    PageUtils queryBlackPage(Map<String, Object> params);

    /**
     * 设置当前供应商为 黑白供应商
     *
     * @param dto  关系表主键id
     * @param user 登录用户
     * @return 提示信息
     * @throws SysException 业务异常
     */
    String updateBw(SetBlackOrWhiteDto dto, User user) throws SysException;

    /**
     * 新增 黑名单数据
     *
     * @param bwRelationAddDto 新增实体
     * @param user             当前登录用户
     * @throws SysException 业务异常
     */
    void saveEnterpriseRelation(BwRelationAddDto bwRelationAddDto, User user) throws SysException;

    /**
     * 修改
     *
     * @param enterpriseRelationUpdateDto 修改实体
     * @param user                        当前登录用户
     * @throws SysException 业务异常
     */
    void updateEnterpriseRelationById(EnterpriseRelationUpdateDto enterpriseRelationUpdateDto, User user) throws SysException;

    /**
     * 获取 企业评级的 枚举值
     *
     * @return 企业评级的枚举值
     */
    List<KeyValueDto> getEnterpriseGrade();


    /**
     * 分页查询 供应商下级供应商
     *
     * @param params 条件参数
     * @param user   登录用户
     * @return 分页数据
     */
    PageUtils getSupplierRelationPage(Map<String, Object> params, User user);


    /**
     * 供应商管理 建立 平台上的 供应商 上下级关系
     * 1 只能添加 平台上的 供应商
     * 2 建立 上下级关系
     * 3 验证 一家企业只存在一条数据
     *
     * @param enterpriseId 下级供应商 企业id
     * @param user         当前登录用户
     * @throws SysException 业务异常
     */
    void addSubordinate(String enterpriseId, User user) throws SysException;

    /**
     * 解除 供应商关系
     *
     * @param relationId 供应商关系id
     */
    void deleteSupplierRelation(String relationId);

    /**
     * 供应商列表-额度配置
     *
     * @param enterpriseId 供应商id
     * @return 额度配置列表
     */
    List<BwBankShowDto> quotaSetting(String enterpriseId) throws SysException;

    /**
     * 邀请链接
     *
     * @param user 用户
     * @return 链接
     */
    String getInvitationLink(HttpServletRequest request, User user);

    /**
     * 获取 收单企业下拉列表
     * @return key id value 名称
     */
    List<KeyAndValue> getAcquirerDropDownList(String ticketId, User user);

}

